#include<iostream>
using namespace std;
const int N = 1e6+5;
// a[i]: i的最小质因子次数
// d[i]: i的约数个数
int a[N], d[N];
int vis[N], primes[N];
int cnt = 0, n;

void get_divisor(int n){
    d[1] = 1;
    for(int i = 2; i <= n; i++){
        // 质数情况下的a和d求法
        if(!vis[i]) {
            primes[cnt++] = i;
            a[i] = 1;
            // 1和它本身
            d[i] = 2;
        }
        // 合数情况下的a和d求法
        for(int j = 0; primes[j] <= n/i; j++){
            int p = primes[j];
            int m = i*p;
            vis[m] = 1;
            if(i % p == 0){
                // m=i*p, p是m的最小质因子
                a[m] = a[i] + 1;
                d[m] = d[i]/a[m] * (a[m]+1);
                break;
            }else{
                // p不是i的质因子
                // m=i*p的最小质因子为p，其次数为1
                a[m] = 1;
                d[m] = d[i]/a[m] * (a[m]+1);
            }
        }
    }
}

int main(){
    cin >> n;
    get_divisor(n);
    for(int i = 1; i <= n; i++){
        printf("d[%d]=%d\n", i, d[i]);
    }
}